﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace Manage_Garage_Car.BusinessObject
{
    class Car
    {
        #region Field

        private Regex m_nameEx;

        private string m_numberPlate;

        private string m_nameStyleCar;

        private string m_nameCustomer;

        private string m_address;

        private string m_numberPhone;

        private string m_email;

        private double m_debit;

        private string str = "|á|à|ả|ã|ạ|ă|ắ|ằ|ẳ|ẵ|ặ|â|ấ|ầ|ẩ|ẫ|ậ|" +
                             "đ|" +
                             "é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ|" +
                             "í|ì|ỉ|ĩ|ị|" +
                             "ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ|" +
                             "ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự|" +
                             "ý|ỳ|ỷ|ỹ|ỵ" +
                             "|,|.|;|/|Á|À|Ả|Ã|Ạ|Ă|Ắ|Ằ|Ẳ|Ẵ|Ặ|Â|Ấ|Ầ|Ẩ|Ẫ|Ậ|" +
                             "Đ|" +
                             "É|È|Ẻ|Ẽ|Ẹ|Ê|Ế|Ề|Ể|Ễ|Ệ|" +
                             "Í|Ì|Ỉ|Ĩ|Ị|" +
                             "Ó|Ò|Ỏ|Õ|Ọ|Ô|Ố|Ồ|Ổ|Ỗ|Ộ|Ơ|Ớ|Ờ|Ở|Ỡ|Ợ|" +
                             "Ú|Ù|Ủ|Ũ|Ụ|Ư|Ứ|Ừ|Ử|Ữ|Ự|" +
                             "Ý|Ỳ|Ỷ|Ỹ|Ỵ|";

        #endregion

        #region Properties

        public string NameCustomer
        {
            get { return m_nameCustomer; }
            set
            {
                m_nameEx = new Regex(@"^[A-Za-z + " + str + "]+$");

                if (!m_nameEx.IsMatch(value))
                {
                    throw new Exception("Tên Khách Hàng không hợp lệ!");
                }

                m_nameCustomer = value;
            }
        }

        public string NumberPlate
        {
            get { return m_numberPlate; }
            set
            {
                if (value == "")
                {
                    throw new Exception("Biển số không hợp lệ!");
                }

                if (!m_nameEx.Match(value).Success)
                {
                    throw new Exception("Biển số không chứa các ký tự đặc biệt!");
                }

                m_numberPlate = value;
            }
        }

        public string NameStyleCar
        {
            get { return m_nameStyleCar; }
            set { m_nameStyleCar = value; }
        }

        public string Address
        {
            get { return m_address; }
            set
            {
                if (value == "")
                {
                    throw new Exception("Địa chỉ không hợp lệ!");
                }

                if (!m_nameEx.Match(value).Success)
                {
                    throw new Exception("Địa chỉ không chứa các ký tự đặc biệt!");
                }

                m_address = value;
            }
        }

        public string NumberPhone
        {
            get { return m_numberPhone; }
            set
            {
                m_nameEx = new Regex(@"^[0-9]+$");
                if (!m_nameEx.Match(value).Success)
                {
                    throw new Exception("Số điện thoại không hợp lệ");
                }

                m_numberPhone = value;
            }
        }

        public string Email
        {
            get { return m_email; }
            set
            {
                if (!m_nameEx.Match(value).Success)
                {
                    throw new Exception("Địa chỉ Email không hợp lệ!");
                }
                m_email = value;
            }
        }

        public double Debit
        {
            get { return m_debit; }
            set
            {
                if (m_debit < 0)
                {
                    throw new Exception("Tiền nợ không hợp lệ!");
                }
                m_debit = value;
            }
        }

        #endregion

        #region Initialization

        public Car()
        {
            m_nameEx = new Regex("");
            m_nameCustomer = null;
            m_numberPlate = null;
            m_nameStyleCar = null;
            m_address = null;
            m_numberPhone = null;
            m_debit = 0;
            m_email = null;
        }

        #endregion

    }
}
